﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using Entidades.Sistema.Base;
namespace Mapping.Sistema.Base
{
    public class MappingZona
    {
        public static List<Zona> ConsultarZonas()
        {
            try
            {
                SqlCommand cmdZonas = new SqlCommand();
                cmdZonas.CommandText = "sp_ConsultarZona";
                cmdZonas.CommandType = System.Data.CommandType.StoredProcedure;
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                cmdZonas.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();

                SqlDataReader drZonas = cmdZonas.ExecuteReader();


                List<Zona> ColZonaes = new List<Zona>();

                while (drZonas.Read())
                {
                    Zona oZona = new Zona();
                    oZona.IdZona = Convert.ToInt32(drZonas["IdZona"]);
                    oZona.Nombre = drZonas["Nombre"].ToString();
                    oZona.Empleado.IdEmpleado = Convert.ToInt32(drZonas["Id_Empleado"]);
                    oZona.Empleado.NombreApellido = drZonas["NombreApellido"].ToString();

                    SqlCommand cmd2UZonas = new SqlCommand();
                    cmd2UZonas.CommandText = "sp_ConsultarZonaBarrios";
                    cmd2UZonas.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd2UZonas.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                    cmd2UZonas.Parameters.Add("@IdZona", System.Data.SqlDbType.Int).Value = oZona.IdZona;
                    SqlDataReader drZonasBarrios = cmd2UZonas.ExecuteReader();

                    while (drZonasBarrios.Read())
                    {
                        Entidades.Sistema.Base.Barrio oBarrio = new Entidades.Sistema.Base.Barrio();
                        oBarrio.IdBarrio = Convert.ToInt32(drZonasBarrios["Id_Barrio"]);
                        oBarrio.Nombre = (drZonasBarrios["Nombre"]).ToString();
                        oZona.AgregarBarrio(oBarrio);

                    }

                    ColZonaes.Add(oZona);
                }

                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                return ColZonaes;
            }
            catch (Exception ex)
            {
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                throw (ex);
            }
        }

        public static Zona ConsultarZonaPorClave(int idZona)
        {
            try
            {
                SqlCommand cmdZonas = new SqlCommand();
                cmdZonas.CommandText = "sp_ConsultarZonaPorClave";
                cmdZonas.CommandType = System.Data.CommandType.StoredProcedure;
                cmdZonas.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdZonas.Parameters.Add("@IdZona", System.Data.SqlDbType.Int).Value = idZona;
                SqlDataReader drZonas = cmdZonas.ExecuteReader();

                Zona oZona = new Zona();

                while (drZonas.Read())
                {
                    oZona.IdZona = Convert.ToInt32(drZonas["Id_Zona"]);
                    oZona.Nombre = drZonas["Nombre"].ToString();
                    oZona.Empleado.IdEmpleado = Convert.ToInt32(drZonas["Id_Empleado"]);

                    SqlCommand cmd2UZonas = new SqlCommand();
                    cmd2UZonas.CommandText = "sp_ConsultarZonasGrupos";
                    cmd2UZonas.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd2UZonas.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                    cmd2UZonas.Parameters.Add("@IdZona", System.Data.SqlDbType.Int).Value = oZona.IdZona;
                    SqlDataReader drZonasBarrios = cmd2UZonas.ExecuteReader();


                    while (drZonasBarrios.Read())
                    {

                        Entidades.Sistema.Base.Barrio oBarrio = new Entidades.Sistema.Base.Barrio();
                        oBarrio.IdBarrio = Convert.ToInt32(drZonasBarrios["IdZona"]);
                        oBarrio.Nombre = (drZonasBarrios["Descripcion"]).ToString();
                        oZona.AgregarBarrio(oBarrio);

                    }

                }
                return oZona;
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }

        public static bool AgregarZona(Zona oZona)
        {
            SqlCommand cmdZona = new SqlCommand();
            cmdZona.CommandText = "sp_AgregarZona";
            cmdZona.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdZona.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdZona.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar, 50).Value = oZona.Nombre;
            cmdZona.Parameters.Add("@Id_Empleado", System.Data.SqlDbType.Int).Value    = oZona.Empleado.IdEmpleado;

            var nro = (decimal)cmdZona.ExecuteScalar();
            oZona.IdZona = (int)nro;

            foreach (Entidades.Sistema.Base.Barrio barrio in oZona.Barrios)
            {
                SqlCommand cmdGruposZonas = new SqlCommand();
                cmdGruposZonas.CommandText = "sp_AgregarZonaBarrio";
                cmdGruposZonas.CommandType = System.Data.CommandType.StoredProcedure;
                cmdGruposZonas.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdGruposZonas.Parameters.Add("@IdZona", System.Data.SqlDbType.Int).Value = oZona.IdZona;
                cmdGruposZonas.Parameters.Add("@Id_Barrio", System.Data.SqlDbType.Int).Value = barrio.IdBarrio;
                cmdGruposZonas.ExecuteNonQuery();
            }

            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");

            return true;
        }

        public static int ModificarZona(Zona oZona)
        {
            SqlCommand cmdZona = new SqlCommand();
            cmdZona.CommandText = "sp_ModificarZona";
            cmdZona.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdZona.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdZona.Parameters.Add("@IdZona", System.Data.SqlDbType.Int).Value = oZona.IdZona;
            cmdZona.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar).Value = oZona.Nombre;
            cmdZona.Parameters.Add("@Id_Empleado", System.Data.SqlDbType.Int).Value = oZona.Empleado.IdEmpleado;
            int nro = Convert.ToInt32(cmdZona.ExecuteScalar());

            SqlCommand cmdEliminarGruposZonas = new SqlCommand();
            cmdEliminarGruposZonas.CommandText = "sp_EliminarZonaBarrios";
            cmdEliminarGruposZonas.CommandType = System.Data.CommandType.StoredProcedure;
            cmdEliminarGruposZonas.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarGruposZonas.Parameters.Add("@IdZona", System.Data.SqlDbType.Int).Value = oZona.IdZona;
            cmdEliminarGruposZonas.ExecuteNonQuery();

            foreach (Entidades.Sistema.Base.Barrio barrio in oZona.Barrios)
            {

                SqlCommand cmdGruposZonas = new SqlCommand();
                cmdGruposZonas.CommandText = "sp_AgregarZonaBarrio";
                cmdGruposZonas.CommandType = System.Data.CommandType.StoredProcedure;
                cmdGruposZonas.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdGruposZonas.Parameters.Add("@IdZona", System.Data.SqlDbType.Int).Value = oZona.IdZona;
                cmdGruposZonas.Parameters.Add("@Id_Barrio", System.Data.SqlDbType.Int).Value = barrio.IdBarrio;
                cmdGruposZonas.ExecuteNonQuery();
            }
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");

            return nro;
        }

        public static bool EliminarZona(Zona oZona)
        {

            SqlCommand cmdZonas = new SqlCommand();
            cmdZonas.CommandText = "sp_EliminarZonaBarrios";
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdZonas.CommandType = System.Data.CommandType.StoredProcedure;
            cmdZonas.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdZonas.Parameters.Add("@IdZona", System.Data.SqlDbType.Int).Value = oZona.IdZona;
            cmdZonas.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");

            SqlCommand cmdEliminarZona = new SqlCommand();
            cmdEliminarZona.CommandText = "sp_EliminarZona";
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdEliminarZona.CommandType = System.Data.CommandType.StoredProcedure;
            cmdEliminarZona.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarZona.Parameters.Add("@IdZona", System.Data.SqlDbType.Int).Value = oZona.IdZona;
            cmdEliminarZona.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");

           
            return true;
        }
    }
}
